
#pragma once
#include <vtkm/cont/arg/Transport.h>
using vtkm::cont::arg::Transport;

#include <type_traits>
#include <vtkm/StaticAssert.h>
#include "libmesh/mesh_base.h"

struct TransportTagMeshIn
{
};


template<typename ContObjectType, typename Device>
struct Transport<TransportTagMeshIn, ContObjectType, Device>
{
	//VTKM_STATIC_ASSERT(std::is_base_of<ContObjectType, libMesh::MeshBase>::value);

	using ExecObjectType = libMesh::MeshBase::element_iterator;
	template<typename InputDomainType>
	VTKM_CONT
		ExecObjectType operator()
		(
			const ContObjectType& obj,
			const InputDomainType&,
			const vtkm::Id inputRange,
			const vtkm::Id,
			vtkm::cont::Token& token
			) const
	{
		return obj.active_local_elements_begin();

	}
};
